!(function(a, b) {
  "function" == typeof define && (define.amd || define.cmd)
    ? define(function() {
        return b(a);
      })
    : b(a, !0);
})(this, function(a, b) {
  function c(b, c, d) {
    a.WeixinJSBridge
      ? WeixinJSBridge.invoke(b, e(c), function(a) {
          g(b, a, d);
        })
      : j(b, d);
  }
  function d(b, c, d) {
    a.WeixinJSBridge
      ? WeixinJSBridge.on(b, function(a) {
          d && d.trigger && d.trigger(a), g(b, a, c);
        })
      : d ? j(b, d) : j(b, c);
  }
  function e(a) {
    return (a = a || {}), (a.appId = E.appId), (a.verifyAppId = E.appId), (a.verifySignType = "sha1"), (a.verifyTimestamp = E.timestamp + ""), (a.verifyNonceStr = E.nonceStr), (a.verifySignature = E.signature), a;
  }
  function f(a) {
    return {
      timeStamp: a.timestamp + "",
      nonceStr: a.nonceStr,
      package: a.package,
      paySign: a.paySign,
      signType: a.signType || "SHA1"
    };
  }
  function g(a, b, c) {
    var d, e, f;
    switch ((delete b.err_code, delete b.err_desc, delete b.err_detail, (d =
      b.errMsg), d || ((d = b.err_msg), delete b.err_msg, (d = h(a, d)), (b.errMsg = d)), (c = c || {}), c._complete && (c._complete(b), delete c._complete), (d = b.errMsg || ""), E.debug && !c.isInnerInvoke && alert(JSON.stringify(b)), (e = d.indexOf(":")), (f = d.substring(e + 1)))) {
      case "ok":
        c.success && c.success(b);
        break;
      case "cancel":
        c.cancel && c.cancel(b);
        break;
      default:
        c.fail && c.fail(b);
    }
    c.complete && c.complete(b);
  }
  function h(a, b) {
    var e, f, c = a, d = p[c];
    return d &&
      (c = d), (e = "ok"), b && ((f = b.indexOf(":")), (e = b.substring(f + 1)), "confirm" == e && (e = "ok"), "failed" == e && (e = "fail"), -1 != e.indexOf("failed_") && (e = e.substring(7)), -1 != e.indexOf("fail_") && (e = e.substring(5)), (e = e.replace(/_/g, " ")), (e = e.toLowerCase()), ("access denied" == e || "no permission to execute" == e) && (e = "permission denied"), "config" == c && "function not exist" == e && (e = "ok"), "" == e && (e = "fail")), (b = c + ":" + e);
  }
  function i(a) {
    var b, c, d, e;
    if (a) {
      for ((b = 0), (c = a.length); c > b; ++b)
        (d = a[b]), (e = o[d]), e && (a[b] = e);
      return a;
    }
  }
  function j(a, b) {
    if (!(!E.debug || (b && b.isInnerInvoke))) {
      var c = p[a];
      c && (a = c), b && b._complete && delete b._complete, console.log(
        '"' + a + '",',
        b || ""
      );
    }
  }
  function k() {
    0 != D.preVerifyState &&
      (u ||
        v ||
        E.debug ||
        "6.0.2" > z ||
        D.systemType < 0 ||
        A ||
        ((A = !0), (D.appId = E.appId), (D.initTime =
          C.initEndTime - C.initStartTime), (D.preVerifyTime =
          C.preVerifyEndTime - C.preVerifyStartTime), H.getNetworkType({
          isInnerInvoke: !0,
          success: function(a) {
            var b, c;
            (D.networkType = a.networkType), (b =
              "http://open.weixin.qq.com/sdk/report?v=" +
              D.version +
              "&o=" +
              D.preVerifyState +
              "&s=" +
              D.systemType +
              "&c=" +
              D.clientVersion +
              "&a=" +
              D.appId +
              "&n=" +
              D.networkType +
              "&i=" +
              D.initTime +
              "&p=" +
              D.preVerifyTime +
              "&u=" +
              D.url), (c = new Image()), (c.src = b);
          }
        })));
  }
  function l() {
    return new Date().getTime();
  }
  function m(b) {
    w &&
      (a.WeixinJSBridge
        ? b()
        : q.addEventListener &&
            q.addEventListener("WeixinJSBridgeReady", b, !1));
  }
  function n() {
    H.invoke ||
      ((H.invoke = function(b, c, d) {
        a.WeixinJSBridge && WeixinJSBridge.invoke(b, e(c), d);
      }), (H.on = function(b, c) {
        a.WeixinJSBridge && WeixinJSBridge.on(b, c);
      }));
  }
  var o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H;
  if (!a.jWeixin)
    return (o = {
      config: "preVerifyJSAPI",
      onMenuShareTimeline: "menu:share:timeline",
      onMenuShareAppMessage: "menu:share:appmessage",
      onMenuShareQQ: "menu:share:qq",
      onMenuShareWeibo: "menu:share:weiboApp",
      onMenuShareQZone: "menu:share:QZone",
      previewImage: "imagePreview",
      getLocation: "geoLocation",
      openProductSpecificView: "openProductViewWithPid",
      addCard: "batchAddCard",
      openCard: "batchViewCard",
      chooseWXPay: "getBrandWCPayRequest"
    }), (p = (function() {
      var b, a = {};
      for (b in o)
        a[o[b]] = b;
      return a;
    })()), (q = a.document), (r =
      q.title), (s = navigator.userAgent.toLowerCase()), (t = navigator.platform.toLowerCase()), (u = !(!t.match(
      "mac"
    ) && !t.match("win"))), (v = -1 != s.indexOf("wxdebugger")), (w =
      -1 != s.indexOf("micromessenger")), (x = -1 != s.indexOf("android")), (y =
      -1 != s.indexOf("iphone") || -1 != s.indexOf("ipad")), (z = (function() {
      var a =
        s.match(/micromessenger\/(\d+\.\d+\.\d+)/) ||
        s.match(/micromessenger\/(\d+\.\d+)/);
      return a ? a[1] : "";
    })()), (A = !1), (B = !1), (C = {
      initStartTime: l(),
      initEndTime: 0,
      preVerifyStartTime: 0,
      preVerifyEndTime: 0
    }), (D = {
      version: 1,
      appId: "",
      initTime: 0,
      preVerifyTime: 0,
      networkType: "",
      preVerifyState: 1,
      systemType: y ? 1 : x ? 2 : -1,
      clientVersion: z,
      url: encodeURIComponent(location.href)
    }), (E = {}), (F = { _completes: [] }), (G = {
      state: 0,
      data: {}
    }), m(function() {
      C.initEndTime = l();
    }), (H = {
      config: function(a) {
        (E = a), j("config", a);
        var b = E.check === !1 ? !1 : !0;
        m(function() {
          var a, d, e;
          if (b)
            c(
              o.config,
              { verifyJsApiList: i(E.jsApiList) },
              (function() {
                (F._complete = function(a) {
                  (C.preVerifyEndTime = l()), (G.state = 1), (G.data = a);
                }), (F.success = function() {
                  D.preVerifyState = 0;
                }), (F.fail = function(a) {
                  F._fail ? F._fail(a) : (G.state = -1);
                });
                var a = F._completes;
                return a.push(function() {
                  k();
                }), (F.complete = function() {
                  for (var c = 0, d = a.length; d > c; ++c)
                    a[c]();
                  F._completes = [];
                }), F;
              })()
            ), (C.preVerifyStartTime = l());
          else {
            for (
              (G.state = 1), (a = F._completes), (d = 0), (e = a.length);
              e > d;
              ++d
            )
              a[d]();
            F._completes = [];
          }
        }), E.beta && n();
      },
      ready: function(a) {
        0 != G.state ? a() : (F._completes.push(a), !w && E.debug && a());
      },
      error: function(a) {
        "6.0.2" > z ||
          B ||
          ((B = !0), -1 == G.state ? a(G.data) : (F._fail = a));
      },
      checkJsApi: function(a) {
        var b = function(a) {
          var c, d, b = a.checkResult;
          for (c in b)
            (d = p[c]), d && ((b[d] = b[c]), delete b[c]);
          return a;
        };
        c(
          "checkJsApi",
          { jsApiList: i(a.jsApiList) },
          (function() {
            return (a._complete = function(a) {
              if (x) {
                var c = a.checkResult;
                c && (a.checkResult = JSON.parse(c));
              }
              a = b(a);
            }), a;
          })()
        );
      },
      onMenuShareTimeline: function(a) {
        d(
          o.onMenuShareTimeline,
          {
            complete: function() {
              c(
                "shareTimeline",
                {
                  title: a.title || r,
                  desc: a.title || r,
                  img_url: a.imgUrl || "",
                  link: a.link || location.href,
                  type: a.type || "link",
                  data_url: a.dataUrl || ""
                },
                a
              );
            }
          },
          a
        );
      },
      onMenuShareAppMessage: function(a) {
        d(
          o.onMenuShareAppMessage,
          {
            complete: function() {
              c(
                "sendAppMessage",
                {
                  title: a.title || r,
                  desc: a.desc || "",
                  link: a.link || location.href,
                  img_url: a.imgUrl || "",
                  type: a.type || "link",
                  data_url: a.dataUrl || ""
                },
                a
              );
            }
          },
          a
        );
      },
      onMenuShareQQ: function(a) {
        d(
          o.onMenuShareQQ,
          {
            complete: function() {
              c(
                "shareQQ",
                {
                  title: a.title || r,
                  desc: a.desc || "",
                  img_url: a.imgUrl || "",
                  link: a.link || location.href
                },
                a
              );
            }
          },
          a
        );
      },
      onMenuShareWeibo: function(a) {
        d(
          o.onMenuShareWeibo,
          {
            complete: function() {
              c(
                "shareWeiboApp",
                {
                  title: a.title || r,
                  desc: a.desc || "",
                  img_url: a.imgUrl || "",
                  link: a.link || location.href
                },
                a
              );
            }
          },
          a
        );
      },
      onMenuShareQZone: function(a) {
        d(
          o.onMenuShareQZone,
          {
            complete: function() {
              c(
                "shareQZone",
                {
                  title: a.title || r,
                  desc: a.desc || "",
                  img_url: a.imgUrl || "",
                  link: a.link || location.href
                },
                a
              );
            }
          },
          a
        );
      },
      startRecord: function(a) {
        c("startRecord", {}, a);
      },
      stopRecord: function(a) {
        c("stopRecord", {}, a);
      },
      onVoiceRecordEnd: function(a) {
        d("onVoiceRecordEnd", a);
      },
      playVoice: function(a) {
        c("playVoice", { localId: a.localId }, a);
      },
      pauseVoice: function(a) {
        c("pauseVoice", { localId: a.localId }, a);
      },
      stopVoice: function(a) {
        c("stopVoice", { localId: a.localId }, a);
      },
      onVoicePlayEnd: function(a) {
        d("onVoicePlayEnd", a);
      },
      uploadVoice: function(a) {
        c(
          "uploadVoice",
          {
            localId: a.localId,
            isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
          },
          a
        );
      },
      downloadVoice: function(a) {
        c(
          "downloadVoice",
          {
            serverId: a.serverId,
            isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
          },
          a
        );
      },
      translateVoice: function(a) {
        c(
          "translateVoice",
          {
            localId: a.localId,
            isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
          },
          a
        );
      },
      chooseImage: function(a) {
        c(
          "chooseImage",
          {
            scene: "1|2",
            count: a.count || 9,
            sizeType: a.sizeType || ["original", "compressed"],
            sourceType: a.sourceType || ["album", "camera"]
          },
          (function() {
            return (a._complete = function(a) {
              if (x) {
                var b = a.localIds;
                b && (a.localIds = JSON.parse(b));
              }
            }), a;
          })()
        );
      },
      previewImage: function(a) {
        c(o.previewImage, { current: a.current, urls: a.urls }, a);
      },
      uploadImage: function(a) {
        c(
          "uploadImage",
          {
            localId: a.localId,
            isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
          },
          a
        );
      },
      downloadImage: function(a) {
        c(
          "downloadImage",
          {
            serverId: a.serverId,
            isShowProgressTips: 0 == a.isShowProgressTips ? 0 : 1
          },
          a
        );
      },
      getNetworkType: function(a) {
        var b = function(a) {
          var c, d, e, b = a.errMsg;
          if (
            ((a.errMsg = "getNetworkType:ok"), (c =
              a.subtype), delete a.subtype, c)
          )
            a.networkType = c;
          else
            switch (((d = b.indexOf(":")), (e = b.substring(d + 1)))) {
              case "wifi":
              case "edge":
              case "wwan":
                a.networkType = e;
                break;
              default:
                a.errMsg = "getNetworkType:fail";
            }
          return a;
        };
        c(
          "getNetworkType",
          {},
          (function() {
            return (a._complete = function(a) {
              a = b(a);
            }), a;
          })()
        );
      },
      openLocation: function(a) {
        c(
          "openLocation",
          {
            latitude: a.latitude,
            longitude: a.longitude,
            name: a.name || "",
            address: a.address || "",
            scale: a.scale || 28,
            infoUrl: a.infoUrl || ""
          },
          a
        );
      },
      getLocation: function(a) {
        (a = a || {}), c(
          o.getLocation,
          { type: a.type || "wgs84" },
          (function() {
            return (a._complete = function(a) {
              delete a.type;
            }), a;
          })()
        );
      },
      hideOptionMenu: function(a) {
        c("hideOptionMenu", {}, a);
      },
      showOptionMenu: function(a) {
        c("showOptionMenu", {}, a);
      },
      closeWindow: function(a) {
        (a = a || {}), c("closeWindow", {}, a);
      },
      hideMenuItems: function(a) {
        c("hideMenuItems", { menuList: a.menuList }, a);
      },
      showMenuItems: function(a) {
        c("showMenuItems", { menuList: a.menuList }, a);
      },
      hideAllNonBaseMenuItem: function(a) {
        c("hideAllNonBaseMenuItem", {}, a);
      },
      showAllNonBaseMenuItem: function(a) {
        c("showAllNonBaseMenuItem", {}, a);
      },
      scanQRCode: function(a) {
        (a = a || {}), c(
          "scanQRCode",
          {
            needResult: a.needResult || 0,
            scanType: a.scanType || ["qrCode", "barCode"]
          },
          (function() {
            return (a._complete = function(a) {
              var b, c;
              y &&
                ((b = a.resultStr), b &&
                  ((c = JSON.parse(b)), (a.resultStr =
                    c && c.scan_code && c.scan_code.scan_result)));
            }), a;
          })()
        );
      },
      openProductSpecificView: function(a) {
        c(
          o.openProductSpecificView,
          { pid: a.productId, view_type: a.viewType || 0, ext_info: a.extInfo },
          a
        );
      },
      addCard: function(a) {
        var e, f, g, h, b = a.cardList, d = [];
        for ((e = 0), (f = b.length); f > e; ++e)
          (g = b[e]), (h = { card_id: g.cardId, card_ext: g.cardExt }), d.push(
            h
          );
        c(
          o.addCard,
          { card_list: d },
          (function() {
            return (a._complete = function(a) {
              var c, d, e, b = a.card_list;
              if (b) {
                for ((b = JSON.parse(b)), (c = 0), (d = b.length); d > c; ++c)
                  (e = b[c]), (e.cardId = e.card_id), (e.cardExt =
                    e.card_ext), (e.isSuccess = e.is_succ
                    ? !0
                    : !1), delete e.card_id, delete e.card_ext, delete e.is_succ;
                (a.cardList = b), delete a.card_list;
              }
            }), a;
          })()
        );
      },
      chooseCard: function(a) {
        c(
          "chooseCard",
          {
            app_id: E.appId,
            location_id: a.shopId || "",
            sign_type: a.signType || "SHA1",
            card_id: a.cardId || "",
            card_type: a.cardType || "",
            card_sign: a.cardSign,
            time_stamp: a.timestamp + "",
            nonce_str: a.nonceStr
          },
          (function() {
            return (a._complete = function(a) {
              (a.cardList = a.choose_card_info), delete a.choose_card_info;
            }), a;
          })()
        );
      },
      openCard: function(a) {
        var e, f, g, h, b = a.cardList, d = [];
        for ((e = 0), (f = b.length); f > e; ++e)
          (g = b[e]), (h = { card_id: g.cardId, code: g.code }), d.push(h);
        c(o.openCard, { card_list: d }, a);
      },
      chooseWXPay: function(a) {
        c(o.chooseWXPay, f(a), a);
      }
    }), b && (a.wx = a.jWeixin = H), H;
});
